选择排序其实是冒泡法的一种改进,其基本思路也是:先确定最小元素,再找次最小元素,最后确定最大元素。
它与冒泡排序的最大区别在于:冒泡排序是只要碰见比它大的元素就交换,而选择排序是直接将元素放在最终的确定位置,从而避免了多次交换过程。
举例说明:数组$a[5]={3,4,2,5,1}$.通过一轮比较知$1$应当放在数组$a[0]$上。所以我们可以直接将$a[0]$与$a[4]$进行交换,从而避免了$a[4]$在比较过程中与其它元素的交换。在中间比较时,不需要记录值,只需要记住索引就可找到元素。
具体程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<stdio.h> void SelectSort(int* arrayA,int n);
void main() { int arrayA[]={4,2,3,6,3,8,5}; int n=sizeof(arrayA)/sizeof(int); SelectSort(arrayA,n); for(int i=0;i<n;i++) printf("%d ",arrayA[i]); printf("\n"); }
void SelectSort(int* arrayA,int n) { for(int i=0;i<n-1;i++) { int index=i; for(int j=i+1;j<n;j++) { if(arrayA[j]<arrayA[index]) index=j; }
if (index!=i) { int temp = arrayA[i]; arrayA[i] = arrayA[index]; arrayA[index] = temp; } } }
|